#include <iostream>

using namespace std;

/*
创建一个表示树中节点的类型
*/
class Node {
public:
  int value;
  Node *left;
  Node *right;

  Node(int v, Node *l, Node *r): value(v), left(l), right(r) {
    cout << "A node with value: " << value << " is created." << endl;
  }
};


// 指针：是一个保存其它变量位置的变量

/*
编写一个函数，它接受一个 int * 作为参数，
把参数指向的数值翻倍。
*/
void doubler(int *param) {
  *param = (*param) * 2;
}

/*
编写一个函数，它接受两个int * 参数,
计算两个指针指向的数字的商，并且把结果保存在第一个指针指向的变量里
*/
void div(int *n, int *m) {
  
}

int main(int argc, char const *argv[])
{
  /* code */
  int n = 10;
  int m = 20;
  // 在变量前面添加 & 表示读取变量在程序中的位置
  cout << &n << endl << &m << endl;

  // 如何保存变量的位置
  int *n_addr = &n;
  int *m_addr = &m;

  cout << n_addr << endl << m_addr << endl;

  // 指针前面加 * 表示读取指针的值
  cout << (*n_addr) << endl << (*m_addr) << endl;

  // 通过指针间接修改变量
  // n += 1;
  ++(*n_addr); // 
  cout << "n = "<< n << endl;
  
  // n = 11
  doubler(n_addr);
  // n = 22
  cout << "n = " << n << endl;

  Node root {1, nullptr, nullptr};
  Node two {2, nullptr, nullptr};
  Node three {3, nullptr, nullptr};

  root.left = &two;
  root.right = &three;

  return 0;
}
